/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package EA_Model.IEC61970.Generation.Production;

import EA_Model.IEC61970.Core.PowerSystemResource;

import EA_Model.IEC61970.Domain.Length;
import EA_Model.IEC61970.Domain.Seconds;
import EA_Model.IEC61970.Domain.Volume;
import EA_Model.IEC61970.Domain.WaterLevel;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Reservoir</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getActiveStorageCapacity <em>Active Storage Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getEnergyStorageRating <em>Energy Storage Rating</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getFullSupplyLevel <em>Full Supply Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getGrossCapacity <em>Gross Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getNormalMinOperateLevel <em>Normal Min Operate Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getRiverOutletWorks <em>River Outlet Works</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillTravelDelay <em>Spill Travel Delay</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCapacity <em>Spillway Capacity</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCrestLength <em>Spillway Crest Length</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCrestLevel <em>Spillway Crest Level</em>}</li>
 *   <li>{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillWayGateType <em>Spill Way Gate Type</em>}</li>
 * </ul>
 * </p>
 *
 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir()
 * @model
 * @generated
 */
public interface Reservoir extends PowerSystemResource {
	/**
	 * Returns the value of the '<em><b>Active Storage Capacity</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Active Storage Capacity</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Active Storage Capacity</em>' reference.
	 * @see #setActiveStorageCapacity(Volume)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_ActiveStorageCapacity()
	 * @model ordered="false"
	 * @generated
	 */
	Volume getActiveStorageCapacity();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getActiveStorageCapacity <em>Active Storage Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Active Storage Capacity</em>' reference.
	 * @see #getActiveStorageCapacity()
	 * @generated
	 */
	void setActiveStorageCapacity(Volume value);

	/**
	 * Returns the value of the '<em><b>Energy Storage Rating</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Energy Storage Rating</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Energy Storage Rating</em>' reference.
	 * @see #setEnergyStorageRating(EA_Model.IEC61970.Domain.Float)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_EnergyStorageRating()
	 * @model ordered="false"
	 * @generated
	 */
	EA_Model.IEC61970.Domain.Float getEnergyStorageRating();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getEnergyStorageRating <em>Energy Storage Rating</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Energy Storage Rating</em>' reference.
	 * @see #getEnergyStorageRating()
	 * @generated
	 */
	void setEnergyStorageRating(EA_Model.IEC61970.Domain.Float value);

	/**
	 * Returns the value of the '<em><b>Full Supply Level</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Full Supply Level</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Full Supply Level</em>' reference.
	 * @see #setFullSupplyLevel(WaterLevel)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_FullSupplyLevel()
	 * @model ordered="false"
	 * @generated
	 */
	WaterLevel getFullSupplyLevel();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getFullSupplyLevel <em>Full Supply Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Full Supply Level</em>' reference.
	 * @see #getFullSupplyLevel()
	 * @generated
	 */
	void setFullSupplyLevel(WaterLevel value);

	/**
	 * Returns the value of the '<em><b>Gross Capacity</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Gross Capacity</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Gross Capacity</em>' reference.
	 * @see #setGrossCapacity(Volume)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_GrossCapacity()
	 * @model ordered="false"
	 * @generated
	 */
	Volume getGrossCapacity();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getGrossCapacity <em>Gross Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Gross Capacity</em>' reference.
	 * @see #getGrossCapacity()
	 * @generated
	 */
	void setGrossCapacity(Volume value);

	/**
	 * Returns the value of the '<em><b>Normal Min Operate Level</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Normal Min Operate Level</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Normal Min Operate Level</em>' reference.
	 * @see #setNormalMinOperateLevel(WaterLevel)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_NormalMinOperateLevel()
	 * @model ordered="false"
	 * @generated
	 */
	WaterLevel getNormalMinOperateLevel();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getNormalMinOperateLevel <em>Normal Min Operate Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Normal Min Operate Level</em>' reference.
	 * @see #getNormalMinOperateLevel()
	 * @generated
	 */
	void setNormalMinOperateLevel(WaterLevel value);

	/**
	 * Returns the value of the '<em><b>River Outlet Works</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>River Outlet Works</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>River Outlet Works</em>' reference.
	 * @see #setRiverOutletWorks(EA_Model.IEC61970.Domain.String)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_RiverOutletWorks()
	 * @model ordered="false"
	 * @generated
	 */
	EA_Model.IEC61970.Domain.String getRiverOutletWorks();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getRiverOutletWorks <em>River Outlet Works</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>River Outlet Works</em>' reference.
	 * @see #getRiverOutletWorks()
	 * @generated
	 */
	void setRiverOutletWorks(EA_Model.IEC61970.Domain.String value);

	/**
	 * Returns the value of the '<em><b>Spill Travel Delay</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Spill Travel Delay</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Spill Travel Delay</em>' reference.
	 * @see #setSpillTravelDelay(Seconds)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_SpillTravelDelay()
	 * @model ordered="false"
	 * @generated
	 */
	Seconds getSpillTravelDelay();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillTravelDelay <em>Spill Travel Delay</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Spill Travel Delay</em>' reference.
	 * @see #getSpillTravelDelay()
	 * @generated
	 */
	void setSpillTravelDelay(Seconds value);

	/**
	 * Returns the value of the '<em><b>Spillway Capacity</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Spillway Capacity</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Spillway Capacity</em>' reference.
	 * @see #setSpillwayCapacity(EA_Model.IEC61970.Domain.Float)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_SpillwayCapacity()
	 * @model ordered="false"
	 * @generated
	 */
	EA_Model.IEC61970.Domain.Float getSpillwayCapacity();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCapacity <em>Spillway Capacity</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Spillway Capacity</em>' reference.
	 * @see #getSpillwayCapacity()
	 * @generated
	 */
	void setSpillwayCapacity(EA_Model.IEC61970.Domain.Float value);

	/**
	 * Returns the value of the '<em><b>Spillway Crest Length</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Spillway Crest Length</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Spillway Crest Length</em>' reference.
	 * @see #setSpillwayCrestLength(Length)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_SpillwayCrestLength()
	 * @model ordered="false"
	 * @generated
	 */
	Length getSpillwayCrestLength();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCrestLength <em>Spillway Crest Length</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Spillway Crest Length</em>' reference.
	 * @see #getSpillwayCrestLength()
	 * @generated
	 */
	void setSpillwayCrestLength(Length value);

	/**
	 * Returns the value of the '<em><b>Spillway Crest Level</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Spillway Crest Level</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Spillway Crest Level</em>' reference.
	 * @see #setSpillwayCrestLevel(WaterLevel)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_SpillwayCrestLevel()
	 * @model ordered="false"
	 * @generated
	 */
	WaterLevel getSpillwayCrestLevel();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillwayCrestLevel <em>Spillway Crest Level</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Spillway Crest Level</em>' reference.
	 * @see #getSpillwayCrestLevel()
	 * @generated
	 */
	void setSpillwayCrestLevel(WaterLevel value);

	/**
	 * Returns the value of the '<em><b>Spill Way Gate Type</b></em>' attribute.
	 * The literals are from the enumeration {@link EA_Model.IEC61970.Generation.Production.SpillwayGateType}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Spill Way Gate Type</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Spill Way Gate Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.SpillwayGateType
	 * @see #setSpillWayGateType(SpillwayGateType)
	 * @see EA_Model.IEC61970.Generation.Production.ProductionPackage#getReservoir_SpillWayGateType()
	 * @model ordered="false"
	 * @generated
	 */
	SpillwayGateType getSpillWayGateType();

	/**
	 * Sets the value of the '{@link EA_Model.IEC61970.Generation.Production.Reservoir#getSpillWayGateType <em>Spill Way Gate Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Spill Way Gate Type</em>' attribute.
	 * @see EA_Model.IEC61970.Generation.Production.SpillwayGateType
	 * @see #getSpillWayGateType()
	 * @generated
	 */
	void setSpillWayGateType(SpillwayGateType value);

} // Reservoir
